home *** CD-ROM | disk | FTP | other *** search
/ CU Amiga Super CD-ROM 2 / CU Amiga Magazine's Super CD-ROM 02 (1996)(EMAP Images)(GB)[!][issue 1996-04].iso / magazine / amiga_e / elist.src.archive / 000025_crash!kirk.safb.af.mil!BWILLS_Sat, 14 Aug 93 10:42:10 PST.msg < prev    next >
Text File  |  1993-08-31  |  4KB  |  86 lines

  1. Received: by bkhouse.cts.com (V1.16/Amiga)
  2.     id AA00000; Sat, 14 Aug 93 10:42:10 PST
  3. Received: from kirk.safb.af.mil by crash.cts.com with smtp
  4.     (Smail3.1.28.1 #15) id m0oRNm2-00006kC; Sat, 14 Aug 93 08:44 PDT
  5. Message-Id: <m0oRNm2-00006kC@crash.cts.com>
  6. Date: 14 Aug 93 10:43:00 CST
  7. From: "Barry D. Wills" <BWILLS@kirk.safb.af.mil>
  8. To: "amigae" <amigae@bkhouse.cts.com>
  9. Subject: BusyPointer.e
  10.  
  11. /*
  12.    SetPointer() demo.  Compile and run.  Click left mouse button in window
  13.    to see the Busy Pointer.  Click the right mouse button in window to quit.
  14.  
  15.    Eric, I have modified Dave's example to make the function that sets the
  16.    pointer a little more reusable.  In order for it to work right some things
  17.    must be considered:
  18.    1.  In order for the pointer size calculation to work, pointerImage must
  19.        be a List of INT.  Since E variables are even-byte aligned, and the
  20.        pointer data are paired, we can use CopyMemQuick().  This is a bonus,
  21.        but the gain is not significant with this small data size.
  22.    2.  If you don't open your own window, then (I think) you must go through
  23.        a lot of hassle to get a pointer to the Workbench window.  If anyone
  24.        knows differently, please let us know.
  25.    3.  You have to know a little about images in order to code them.  There
  26.        are some utils out there to capture the pointer to C source code, or
  27.        convert a brush to C source code.  You'll have to hunt for those.
  28.        If you want a tutorial on how to construct image data, I might could 
  29.        cook something up for you.  RKRMs discuss it, but rather tersely.
  30. */
  31.  
  32. MODULE 'exec/memory'
  33. MODULE 'intuition/intuition'
  34. MODULE 'intuition/screens'
  35.  
  36. CONST SIZEOF_INT = 2
  37.  
  38. PROC mySetPointer (win : PTR TO window,
  39.                    pointerImage : PTR TO INT)
  40.   /* NOTE: pointerImage CAN reside in any type of MEM. */
  41.   DEF chipMem = NIL,
  42.       sizePointer = 0
  43.   sizePointer := ListLen (pointerImage) * SIZEOF_INT
  44.   IF chipMem := AllocMem (sizePointer, MEMF_CHIP)
  45.     CopyMemQuick (pointerImage, chipMem, sizePointer)
  46.     SetPointer (win, chipMem, 16, 16, -6, 0)
  47.     /*---------------------------------------*/
  48.     /*--         DON'T do this!!!          --*/
  49.     /*--  (SetPointer() does it for you.)  --*/
  50.     /*--                                   --*/
  51.     /*  FreeMem (pointerImage, sizePointer)  */
  52.     /*--                                   --*/
  53.     /*---------------------------------------*/
  54.   ENDIF
  55. ENDPROC
  56.  
  57. PROC main ()
  58.   DEF myWin       = NIL,
  59.       busyPointer = NIL : PTR TO INT
  60.   IF myWin := OpenW (20, 20, 100, 100, 0, 0,
  61.                      'BusyPointer', NIL, WBENCHSCREEN, NIL)
  62.     busyPointer := [$0000, $0000,  /* Reserved, must be NULL */
  63.                     $0400, $07c0,
  64.                     $0000, $07c0,
  65.                     $0100, $0380,
  66.                     $0000, $07e0,
  67.                     $07c0, $1ff8,
  68.                     $1ff0, $3fec,
  69.                     $3ff8, $7fde,
  70.                     $3ff8, $7fbe,
  71.                     $7ffc, $ff7f,
  72.                     $7efc, $ffff,
  73.                     $7ffc, $ffff,
  74.                     $3ff8, $7ffe,
  75.                     $3ff8, $7ffe,
  76.                     $1ff0, $3ffc,
  77.                     $07c0, $1ff8,
  78.                     $0000, $07e0,
  79.                     $0000, $0000] : INT  /* Reserved, must be NULL */
  80.     mySetPointer (myWin, busyPointer)
  81.     WHILE Mouse () <> 2 DO WaitTOF ()
  82.     CloseW (myWin)
  83.   ENDIF
  84. ENDPROC
  85.  
  86. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%